package com.linyaonan.design.singleton;

/**
 * @author: Lin
 * @date: 2020/2/2
 */
public class Singleton4 {

    private static volatile Singleton4 s;

    private Singleton4() {

    }

    /**
     * 使用局部加锁，double check的方式，并且将s用volatile修饰，保证不会指令重拍
     * 这种方式是比较好的懒汉式，既满足了懒加载，又保证了已创建读的性能
     * @return
     */
    public static Singleton4 getInstance() {
        if (s == null) {
            synchronized (Singleton4.class) {
                if (s == null) {
                    s = new Singleton4();
                }
            }
        }
        return s;
    }

}
